// 'ui';

/**
 * 时间：2024年11月12日 10点03分
 * 抖音商城评论点赞自动化脚本
 * 整体流程
 * 1. 打开抖音
 * 2. 等待30秒钟，此时等待是为了关闭抖音的更新和未成年等模式，确保能正常单击搜索按钮
 *    这里我们需要定义一个函数，其参数为 等待秒数、随机等待的最短时间、随机等待的最长时间
 * 3. 此时单击右上角的搜索icon，
 *    在单击时，我们回进行屏幕检索，查询是否有“搜索”两个字，如果有进行输入
 *    否则继续单击，重复三次，如果三次后依然没有，则停止程序
 * 4. 进入店铺后，单击商品、
 *
 */

// const douyinClosePopup = require('./utils/douyinClosePopup')
// import douyinClosePopup from "./utils/douyinClosePopup";
// const {
//   homePageWidget,
//   searchContainerWidget,
//   searchInputWidget,
//   searchButtonWidget,
//   searchTagWidget
// } = require('./utils/widget');

/**
 * 设计软件的ui
 * 这里我们需要让用户输入店铺的名称
 *
 */
// ui.layout(
//   <vertical>
//         <input id="deptName" hint="请输入店铺名称" />
//         <button id="runBtn" text="开始运行" />
//   </vertical>
// )

//设置分辨率
setScreenMetrics(1080, 2340);


//定义全局变量
const homePageWidget = 'com.ss.android.ugc.aweme:id/0zl' // 首页按钮控件
const likeWidget = 'com.ss.android.ugc.aweme:id/ev4' // 视频点赞按钮控件
const commentWidget = 'com.ss.android.ugc.aweme:id/c+1' // 评论按钮控件
const commentPopupWidget = 'com.ss.android.ugc.aweme:id/tqf' // 评论框弹窗界面
const commentInputWidget = 'com.ss.android.ugc.aweme:id/c7p' // 评论输入框控件
const commentInputSendWidget = 'com.ss.android.ugc.aweme:id/c=1' // 评论发送控件
const commentCloseWidget = 'com.ss.android.ugc.aweme:id/back_btn' // 评论关闭控件
const collectWidget = 'com.ss.android.ugc.aweme:id/c32' // 收藏按钮控件
const liveClose = 'com.ss.android.ugc.aweme:id/root' // 关闭直播间
const livePersonAmountWidget = 'com.ss.android.ugc.aweme:id/p25' // 直播间人数控件
const liveUserCommentWidget = 'com.ss.android.ugc.aweme:id/text' // 直播间用户评论控件
const liveUserPopupTopWidget = 'com.ss.android.ugc.aweme:id/yc_' // 直播间用户详情上面区域
const liveUserPopupBottomWidget = 'com.ss.android.ugc.aweme:id/x7z' // 直播间用户详情下面区域
const liveUserFocusWidget = 'com.ss.android.ugc.aweme:id/09h' // 直播间用户详情关注数
const liveUserFansWidget = 'com.ss.android.ugc.aweme:id/09l' // 直播间用户详情粉丝数
const liveUserAvatar = 'com.ss.android.ugc.aweme:id/pm7' // 直播间用户详情头像
const liveUserInfoAreaWidget = 'com.ss.android.ugc.aweme:id/qfa' // 直播间进入用户详情页资料信息区域
const liveUserInfoPageWidget = 'com.ss.android.ugc.aweme:id/r8y' // 直播间用户详情页页面
// const searchContainerWidget = 'com.ss.android.ugc.aweme:id/qcx' // 搜索框外层容器控件
const searchContainerWidget = 'com.ss.android.ugc.aweme:id/xza' // 搜索框外层容器控件
const tabbarShopBenCard = 'com.ss.android.ugc.aweme:id/wja';//tabbar中店铺商城的按钮卡片，（刘立业要求）
const searchInputWidget = 'com.ss.android.ugc.aweme:id/et_search_kw' // 搜索页输入框控件
const searchButtonWidget = 'com.ss.android.ugc.aweme:id/2gm' // 搜索框搜索按钮控件
const searchTagWidget = 'android:id/text1' // 搜索页标签分类控件
// const searchTagWidget = 'android:id/wrh' // 搜索页标签分类控件
const searchVideoWidget = 'com.ss.android.ugc.aweme:id/ttf' // 搜索页视频控件
const livePopupWindowWidget = 'com.ss.android.ugc.aweme:id/ip3'//直播弹框的id空间
// const productImageWidget = 'com.ss.android.ugc.aweme:id/v_t';//商品盒子
const productImageWidget = 'com.ss.android.ugc.aweme:id/xe4';//商品盒子
const productTextWidget = 'com.ss.android.ugc.aweme:id/yeb';//商品盒子
const praiseBtnWidget = 'com.ss.android.ugc.aweme:id/duw';//评论的点赞按钮

const productDetailByNewBtnWidget = 'com.ss.android.ugc.aweme:id/xyy';//产品页面详情评论列表中的最新按钮
const moreCommentBtnWidget="com.ss.android.ugc.aweme:id/pz6";

// const deviceWidth = device.width; // 获取设备宽度
// const deviceHeight = device.height; // 获取设备高度
const deviceWidth = 1080; // 获取设备宽度
const deviceHeight = 2400; // 获取设备高度

/** 全局失败次数，用于for循环，如果达到则退出脚本 */
const ERROR_COUNT_STOP = 3;

let deptName = "安踏";

//在单击运行按钮后，开始运行main函数
// ui.runBtn.click(function () {
//   deptName=ui.deptName.text();
//   console.log(84,'用户输入的店铺名称', deptName);
//   //开启线程运行
//   threads.start(function(){
//     main();
//   });
// });

main();

/**
 * @description 运行主函数
 */
function main() {
  toast('任务开始');
  openAppliation("抖音");
  //等待6~15秒
  wait(5 * 1000, 1000, 10 * 1000);
  //关闭弹框
  closePopupMain();
  // //等待6~15秒
  // wait(5 * 1000, 1000, 10 * 1000);
  //确保在首页
  toIndexPage();
  wait(2 * 1000, 1000, 10 * 1000);
  //单击搜索功能
  clcikIndexPageSearchBtn(deptName);
  //开始商品评价
  productEvaluate();

  // for (let i = 0; i < 5; i++) {
  //   swipeUpRandomly(); // 随机向上滑动
  //   wait(5 * 1000, 1000, 5 * 1000);
  // }
}

/**
 * @description 打开应用
 * @param appName 应用名称
 */
function openAppliation(appName) {
  //不让用户再输入了
  // const name = rawInput("请输入应用名称");
  //看看是否启动成功
  // const isLaunch = launchApp(appName);
    const packageName = "com.ss.android.ugc.aweme"; // 视频App的包名
  // 打开视频App
  const isLaunch=launch(packageName);//这里我们不适用包名的方式了
  console.log(23, isLaunch);
  if (isLaunch) {
    toast(`${appName} 启动成功`);
  } else {
    toast(`${appName} 启动失败`);
  }
}

/**
 * @description 等待函数(单位是毫秒)
 * @param {*} waitingTime 最少等待时间
 * @param {*} randomMinTime 随机最短等待时间
 * @param {*} randomMaxTime 随机最长等待时间
 */
function wait(waitingTime, randomMinTime, randomMaxTime) {
  // 确保 min 和 max 是数字，并且 max 不小于 min
  if (typeof randomMinTime !== 'number' || typeof randomMaxTime !== 'number' || randomMinTime > randomMaxTime) {
    throw new Error('参数错误，请确保 min 和 max 为数字，且 min 小于等于 max');
  }
  const waitTime = waitingTime + Math.random() * (randomMaxTime - randomMinTime) + randomMinTime;
  toast(`将在${waitTime / 1000}执行`);
  sleep(waitTime);
}

/**
 * @description 自定义随机函数
 * @param {*} minNum 最小值
 * @param {*} maxNum 最大值
 */
function customizeRanomFun(minNum, maxNum) {
  if (typeof minNum !== 'number' || typeof maxNum !== 'number' || minNum > maxNum) {
    throw new Error('参数错误，请确保 min 和 max 为数字，且 min 小于等于 max');
  }
  const waitTime = Math.random() * (maxNum - minNum) + maxNum;
  console.log('customizeRanomFun', waitTime);
  return waitTime;
}

// 随机向上滑动屏幕
function swipeUpRandomly() {
  console.log(67, deviceWidth, deviceHeight);
  // 从屏幕左侧向右侧滑动，持续时间为 1000 毫秒
  swipe(
    customizeRanomFun(200, 500),
    deviceHeight / 2 + customizeRanomFun(100, 300),
    customizeRanomFun(200, 500),
    deviceHeight / 2 - customizeRanomFun(100, 300),
    customizeRanomFun(500, 1200),
  );
  // 模拟滑动操作
  // swipe(startX, correctedStartY, startX, endY, random(500, 1000));
  console.log("完成一次滑动");
}

/**
 * @description 打开搜索输入框,并进行输入,确定进行搜索
 * @param shopName 店铺名称
 */
function openSearchAndGo(shopName) {
  for (let i = 0; i < ERROR_COUNT_STOP; i++) {
    //开始单击右上角
  }
}

/**
 * 切换到APP首页界面
 */
function toIndexPage() {
  const homePage = id(homePageWidget).text("首页").findOne(10000);
  if (homePage && homePage.parent()) {
    homePage.parent().click();
    toastLog('切换至首页');
  } else {
    toastLog("首页按钮查找失败，退出脚本");
    exit();
  }
}

/**
 * @description 单击首页的搜索icon
 * 并进行店铺搜索进入店铺商品列表
 * @param shopName 店铺名称
 */
function clcikIndexPageSearchBtn(shopName) {
  console.log(177, shopName);
  // return;
  // 点击搜索图标
  click(996, 183);
  // 因为分析搜索控件，没有找到对应的 id，所以只能找外层，找出子元素，从而找到搜索控件
  // const searchContainer = id(searchContainerWidget).findOne().children();
  // console.log(179, searchContainer);
  // const search = searchContainer[searchContainer.length - 1];
  // search.click();

  toast("点击搜索icon");
  //等待
  wait(2000, 0, 5000);
  //输入店铺名称
  id(searchInputWidget).findOne().setText(shopName);
  wait(2000, 0, 7000);
  //获取搜索按钮
  const searchEl = id(searchButtonWidget).findOne();
  log("获取到搜索按钮的区域", searchEl.bounds().centerX(), searchEl.bounds().centerY());
  //单击搜索
  click(searchEl.bounds().centerX(), searchEl.bounds().centerY());
  wait(4000, 1000, 3000);
  //单击二级菜单的店铺
  console.log(245,"单击二级菜单的店铺");
  id(searchTagWidget).text("店铺").findOne().parent().click();
  // const tabbarShopBenCardList = id(tabbarShopBenCard).find();
  // console.log(248, tabbarShopBenCardList);
  // tabbarShopBenCardList[1].click();
  wait(2000, 0, 6000);
  //单击进店逛逛
  // id(searchTagWidget).text("进店逛逛").findOne().parent().click();
  // click('进店逛逛');
  // const isGoStopBtn=text("进店").findOne();
  //这里我们看看通过类名，能不能找到
  // const isGoStopBtn=className("com.lynx.tasm.behavior.ui.LynxFlattenUI").findOne();
  // if(isGoStopBtn){
  //   console.log(251, isGoStopBtn);
  //   isGoStopBtn.click();
  //   console.log(252, '进入店铺成功');
  // }else{
  //   console.log('进入店铺失败');
  // }
  //以上方式都不行，这里我们暂时直接先使用click
  click(533, 460);
  wait(5, 0, 6000);
  //随机滑动一次
  swipeUpRandomly();
  wait(3, 0, 6000);
  //获取直播弹窗的关闭按钮
  const livePopupWindow = id(livePopupWindowWidget).findOne();
  if (livePopupWindow.click()) {
    livePopupWindow.click();
    console.log(268, "单击首页的搜索icon 执行完毕");
  }

}


/**
 * @description 进行商品评价
 *
 */
function productEvaluate() {

  /**
   * 用于保持总共单击了多少次商品
   * 这里保存的原因是找奇数，如果是，这进行滑动
   *
   * */
  let productClickTotal=0;

  wait(3, 1000, 6000);

  //单击商品图片,进入商品详情页
  /**
   * 在这里我们要获取全部的商品图片，并打印看一下
   *
   */
    // const productImage = id(productImageWidget).findOne();
  const productImage = id(productTextWidget).find();
  console.log(270, productImage.length);
  /**
   * 这里的商品如何进行单击
   * 
   * 
   */
  if(productClickTotal===0 || productClickTotal % 2 ===0){
    //在这里,单击第一个

  }else{
    //在这里单击一行, 第二个

  }


  productImage.forEach((element, index) => {
    // for (let i = 0; i < productImage.length; i++) {
    if (element.click() != "") {
      element.click();
    } else {
      console.log(298, "单击商品失败");
    }

    // productImage[i].click();
    // return;
    // productImage.click();
    //向下滑动
    wait(5, 1000, 4000);
    //随机滑动3次,找评价tabbar
    //是否单击评价成功
    // swipeUpRandomly();
    // wait(5,1000,4000);

    // let isClickPingJia=undefined;
    // while(!isClickPingJia){
    //   swipeUpRandomly();
    //   wait(5,1000,4000);
    //   if(text("评价")){
    //     isClickPingJia=text("评价").findOne();
    //   }

    //   // isClickPingJia = uiselector.textStartsWith("商品评价");
    // }
    // console.log(241, isClickPingJia);
    //此时,我们一般是无法单击评价的
    // isClickPingJia.click();
    swipeUpRandomly();
    wait(2000, 1000, 2000);
    swipeUpRandomly();
    //接着,单击顶部的评价,确保能够进入到评价模块
    //这里我们单击评价按钮内部的随机位置
    // click(330+customizeRanomFun(1,80), 290+customizeRanomFun(1,60));//注意,这里要随机
    // click(360, 330);//注意,这里要随机
    desc("评价").findOne().click();

    wait(2000, 2, 2000);
    //然后单击第一条评论，进入商品的评价列表
    // 77 465
    // 767 670
    // wait(1000,2000,5000);
    // click(440+customizeRanomFun(1,100), 640+customizeRanomFun(1,20));//注意,这里要随机
    //进入产品评论列表
    click(440, 640);//注意,这里要随机

    //单击最新评论按钮
    wait(2000, 1000, 2000);
    id(productDetailByNewBtnWidget).click();

    wait(3000, 2000, 5000);

    //开始进行点赞操作
    //这里我们先进行3次点赞
    // let i = 0;
    while (true) {      //这里的返回，通过暂无更多进行退出
      // if(text("暂无更多").findOne()){
      //   break;
      // }
      //这里我们不推荐使用id进行寻找，而是通过文字，有用去找
      swipeUpRandomly();
      wait(1000, 1000, 2000);
      // const moreCommentBtnClick=id(moreCommentBtnWidget).findOne();
      // if (moreCommentBtnClick.click) {
      //   moreCommentBtnClick.click();
      //   // swipeUpRandomly();
      //   // wait(1000, 1000, 2000);
      //   // i++;
      // }

      if (id(praiseBtnWidget).click()) {
        id(praiseBtnWidget).click();
        swipeUpRandomly();
        wait(1000, 1000, 2000);
        // i++;
      }
      // const praiseBtn = click('有用').findOne();
      // console.log(281, praiseBtn);
      // if(praiseBtn!==null){
      //   praiseBtn.click();
      //   swipeUpRandomly();
      //   wait(1000, 2000, 5000);
      // }
      //这里的返回，通过暂无更多进行退出
      // if(id(moreCommentBtnWidget).click()){
        
      // }
      if(click("暂无更多")){
        break;
      }
    }
    console.log(294, "进行商品评价 执行完毕");
    toast("单个商品评价 执行完毕");
    //执行完毕后，进行返回两次
    back();
    wait(3000, 1000, 2000);
    back();
    wait(3000, 1000, 2000);
    back();


  });
// }

}


/**
 * @description 关闭打开抖音时,弹出的弹框
 */
function closePopupMain() {
  log("处理弹窗线程启动")
  threads.start(function () {
    while (true) {
      closeFirstPageAd()
      closeUpdatePopup()
      closeYouthMode()
      closeCommentAtmosphere()
      closeFindTelFriends()
      closeRecommentMoreLive()
      closeRecommentFriends()
      closeSetNickName()
    }
  })
}

/**
 * 首屏广告
 */
function closeFirstPageAd() {
  if (desc("跳过广告").exists()) {
    log("发现首屏广告")
    desc("跳过广告").click()
    toastLog("跳过首屏广告完成")
    sleep(1000)
  }
}

/**
 * 更新检测弹窗
 */
function closeUpdatePopup() {
  if (text("检测到更新").exists()) {
    log("发现软件更新弹窗")
    click("以后再说")
    toastLog("关闭更新弹窗完成")
    sleep(1000)
  }
}

/**
 * 青少年模式弹窗
 */
function closeYouthMode() {
  if (text("开启青少年模式").exists()) {
    log("发现青少年模式弹窗")
    click("关闭")
    toastLog("关闭青少年模式弹窗完成")
    sleep(1000)
  }
}

/**
 * 共建抖音评论氛围弹窗
 */
function closeCommentAtmosphere() {
  if (text("共建抖音评论氛围").exists()) {
    log("发现 共建抖音评论氛围 弹窗")
    click("好的")
    toastLog("关闭 共建抖音评论氛围 弹窗完成")
    sleep(1000)
  }
}

/**
 * 访问你的通讯录弹窗
 */
function closeFindTelFriends() {
  if (text("抖音 想访问你的通讯录").exists()) {
    log("发现 访问你的通讯录 弹窗")
    click("拒绝")
    toastLog("关闭 访问你的通讯录 弹窗完成")
    sleep(1000)
  }
}

/**
 * 直播间-为你推荐更多主播
 */
function closeRecommentMoreLive() {
  if (text("为你推荐更多主播").exists()) {
    log("发现 为你推荐更多主播 弹窗")
    click("退出")
    toastLog("关闭 为你推荐更多主播 弹窗完成")
    sleep(1000)
  }
}

/**
 * 朋友推荐
 */
function closeRecommentFriends() {
  if (text("朋友推荐").exists()) {
    log("发现 朋友推荐 弹窗")
    desc("关闭").click()
    toastLog("关闭 朋友推荐 弹窗完成")
    sleep(1000)
  }
}

/**
 * 设置昵称和头像
 */
function closeSetNickName() {
  if (text("设置昵称和头像，更好地表达你的意见").exists()) {
    log("发现 设置昵称和头像 弹窗")
    desc("关闭").click()
    toastLog("关闭 设置昵称和头像 弹窗完成")
    sleep(1000)
  }
}

